package com.itheima.sh.a_test_01;
import java.util.Random;
public class Test02 {

    /*
        目标：完成验证码案例
     */

        public static void main(String[] args) {
            //7.调用方法获取验证码
            String checkCode = getCheckCode(3);
            System.out.println("checkCode = " + checkCode);
        }

        /*
            1.定义方法根据调用者传递的整数即验证码的位数来生成验证码，生成的验证码最后是一个字符串即String
                参数 ：int n 表示验证码的位数
                返回值：生成的验证码
         */
        public static String getCheckCode(int n) {
            //2.定义字符串变量保存最后的验证码   例如"1zAw"
            String checkCode = "";
            //3.使用循环控制生成验证码的位数
            //4.创建随机数类对象
            Random r = new Random();
            for (int i = 1; i <= n; i++) {
            /*
                5.获取随机数：
                    数字：r.nextInt(10)===>0-9
                    小写字母：字符a的编码值是97，字符z的编码值：97+25===》122  a-z===>97-122===>减去97  0-25+97
                        r.nextInt(26)+97===》推迟生成的随机数范围是97-122===>将随机生成的整数转换为字符(char)97===>a
                    大写字母：字符A编码值是65，Z编码值90。
                        随机生成的整数： 65-90  r.nextInt(26)+65
             */
                //5.1随机生成产生哪个随机数的字符
                int type = r.nextInt(3);//type取值0 生成数字字符0-9    type取值1 生成小写字符 a-z  type取值2 生成大写字符A-Z
                switch (type){
                    case 0:
                        //type取值0 生成数字字符0-9
                        checkCode = checkCode + r.nextInt(10);
                        //停止switch
                        break;
                    case 1:
                        //type取值1 生成小写字符 a-z
                        //(char)(r.nextInt(26)+97) 必须将随机生成的整个小写字符对应的整数强制转换为char类型
                        checkCode = checkCode + (char)(r.nextInt(26)+97);
                        //停止switch
                        break;
                    case 2:
                        //type取值2 生成大写字符A-Z
                        checkCode = checkCode + (char)(r.nextInt(26)+65);
                        //停止switch
                        break;
                }

            }
            //6.返回验证码
            return checkCode;
        }
    }

